<?php

class GObject
{
	private $oModified;
	private $oData;
	
	public function __construct()
	{
		$this->oModified = false;
		$this->oData = array();
	}

	protected function __set($name, $val)
	{
		if (isset($this->oData[$name]) && 
				$this->oData[$name] !== $val)
			$this->oModified = true;
		$this->oData[$name] = $val;
	}
	protected function __get($name)
	{
		if (!isset($this->oData[$name])) return null;
		
		return $this->oData[$name];
	}	
	
	public function saved() { $this->oModified = false; }
	public function markModified() { $this->oModified = true; }
	
	public function isModified() { return $this->oModified; }
	
	/** Возращается true, если был модифицирован хоть какой то из имеющихся объектов */
	public function isAnyModified()
	{
		if ($this->oModified) return true;
		
		foreach ($this->oData as $data)
		{
			if ($data instanceof GObject && $data->isModified())
				return true;
		}
		
		return false;
	}
}

?>